https://graphviewer.nl/

For windows users this open sourse project can improve by blocking
spy and other websites at https://crazymax.dev/WindowsSpyBlocker/

The gml4gtk windows version has included the gtk-3 dll's but when
thwy are already installed these included dll's are not needed.

To run this program on windows it needs the 64bits gtk-3 dll's to be installed
and these are available from: https://sourceforge.net/projects/gtk3win/
The file with 64bits gtk3 dll's is gtk3-runtime x84_64
Below are the names of the dll's which are included in a bundled version.

The gml4gtk program can be installed on any folder directory on windows.
The gml4gtk program does not need or create extra files or change files.
The gml4gtk program does not use network or send mail or other data.

The gml4gtk windows bundle has all GTK+ dll's included and can be installed
in any directory folder. To remove it remove the directory with the dlls'

Howto compile:

./autogen.sh (or autoreconf -fvim)
./configure
make
cd src
./gml4gtk

also:
make clean
make cleaner

For gtk2 or gtk3 or gtk4
./configure --with-gtk=2
./configure --with-gtk=3
./configure --with-gtk=4

Usage:
gml4gtk
or:
gml4gtk file.gml
gml4gtk file.dot
gml4gtk file.gv

Or see make-gtk2.sh and make-gtk3.sh scripts for the gtk2 or gtk3 versions.

also these options can be used:
gml4gtk --version [print version to stdout and exit]
gml4gtk --debug [shows gtk gdk drawing debug]

setting GTK_DEBUG in the environment turns on gtk debugging, see the gtk docs

Font rendering is different between gtk3 and gtk4.
If you have cairo 1.17.4, we are using subpixel positioning in gtk4. 
That could be described as more blurry, but its not a bug.

When compiled with "./configure --enable-gcc-warnings" to get more compiler
checks a -DMEMCHECK cflag is set and in dpmem.c is extra memory check done.

Because this is a gtk program it can be compiled for windows or mac osx.
The gtk support for compilation on os-x is at https://gitlab.gnome.org/GNOME/gtk-osx
On Linux it is possible to cross compile to os-x and not easy to create a setup.

When compiled for windows it needs all gtk dll's to run the program.

The gml4gtk reads most GML files, BGV files and partial DOT graph files from
gcc, bison, llvm, radare2 and more tools can be used.

The dot html labels with <table> elements are partial supported in version 7.3
It can happen the drawing is not oke, then switch to pos mode 1

In the data directory are few sample graph files to try it.

When the left mouse button is pressed on the drawing and held down
the drawing can be dragged around instead of using the sliders.

When the vertical distance between nodes is too much select
position mode 3 and use the dy setting in the GTK+ user interface

When the binary is renamed to gml4gtkd then debug output is generated.

When "yydebug=true" is used in dot language debug output is generated.

digraph "example"
{
  yydebug=true;
  ...
}

The save-as-dia writes xml data usable with diagram editor dia
for Linux and windows at http://dia-installer.de/

The save-as-jgf writes json graph data with extension .jgf
documented at https://jsongraphformat.info/

The directory jgf4web has javascript to run jgf layout in the browser.

To create a callgraph using gcc use gcc option -fcallgraph-info
and the output.ci file is a graph file to open with file->open ci

Some other gcc options generating dot graph are -fdump-rtl-all-graph,
-fdump-tree-all-graph, -fdump-ipa-all-graph, -fdump-analyzer-callgraph,
-fdump-analyzer-exploded-graph -fdump-analyzer-state-purge -fdump-analyzer-supergraph

The save-as-svg image output allows generation of big images which
can be used with firefox browser, inkscape or gimp without problems.

The file sfg.c is a single file graph layout library with the user api
described in sfg.h and there is a python, php interface possible with
example code at https://notabug.org/mooigraph/sfgraph

Most dot language details are parsed but not implemented yet.
Also a->b,c is not supported but a->{b,c} works as expected.

When the "popup" checkbutton is active then a popup window with the
node label text will appear when the mouse is at a node and this is
usable with large graph layout drawings. And it can be turned off.

On sourceforge at the "files" tab there is gml4win.exe with
less features but smaller and does not need extra dll's to run.

The windows gml4gtk.exe program is a 64 bits program.
It is cross-compiled on a GNU/Linux computer.
It is tested using wine64 windows emulator on Linux.
In directory src is the sourcecode of gml4gtk.
In directory data are some dot and gml graphs.
The dll files are for gtk-3 and gml4gtk.exe is using gtk3.
The zip file is created using zip -r on Linux.
The gml4gtk.exe program is verified to run on native windows 64bit.
The gml4gtk.exe program is checked to be virus free.

To compile gml4gtk on windows it needs the mingw compiler and gtk+ runtime and gtk+ development files.

There is mingw compiler but also alternative which has newest gcc 11 version at
https://github.com/skeeto/w64devkit

and the releases are at
https://github.com/skeeto/w64devkit/releases

 
This are the needed dll's to run this gml4gtk.exe gtk+3 program:
libatk-1.0-0.dll
libcairo-2.dll
libcairo-gobject-2.dll
libcairo-script-interpreter-2.dll
libcroco-0.6-3.dll
libffi-6.dll
libfontconfig-1.dll
libfreetype-6.dll
libgailutil-3-0.dll
libgdk-3-0.dll
libgdk_pixbuf-2.0-0.dll
libgio-2.0-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgobject-2.0-0.dll
libgthread-2.0-0.dll
libgtk-3-0.dll
libiconv-2.dll
libintl-8.dll
libjasper-1.dll
libjpeg-9.dll
liblzma-5.dll
libpango-1.0-0.dll
libpangocairo-1.0-0.dll
libpangoft2-1.0-0.dll
libpangowin32-1.0-0.dll
libpixman-1-0.dll
libpng15-15.dll
librsvg-2-2.dll
libtiff-5.dll
libtiffxx-5.dll
libwinpthread-1.dll
libxml2-2.dll
zlib1.dll

The gmltest directory has index.html page with javascript for syntax check of a gml graph

The jgf4web directory has index.html page with javascript for graph layout of json jgf graph data

The jgf json graph save and open feature is experimental or just may work.

The json jgf files have file extension .jgf

Read also the Kozo Sugiyama book isbn 981-02-4879-2

If you want a good sugiyama barycenter javascript routine, see:
https://github.com/speich/dGraph

For free pdf's about graph layout topics search also here:
https://scholar.archive.org/
Use for example "graph barycenter" as search.

To generate skeleton for use with flex-2.4.6 go into it's src dir and run:
sed 's/m4_/m4postproc_/g; s/m4preproc_/m4_/g' flex.skl | m4 -P -DFLEX_MAJOR_VERSION=2 -DFLEX_MINOR_VERSION=4 -DFLEX_SUBMINOR_VERSION=6 | sed 's/m4postproc_/m4_/g' > myflex.skl
Then use flex with "flex -Smyflex.skl input.l" and now myflex.skl can be edited.

The source is checked and used with clang-12 and gcc-11 compiler development version.

To make a package for debian, slackware, fedora, ubuntu the checkinstall program can be used.

Settings for autoconf can be changed editing the .autom4te.cfg file

some parts are (C) Universitaet Passau 1986-1991
some parts are Copyright (C) 1998-2021 Free Software Foundation, Inc. from GNU GCC
some parts are Copyright (C) 2008, 2011 Matthias Stallmann
some parts are Copyright (C) 2008, 2011 Saurabh Gupta

For questions mail to mooigraph on gmail.com

/*
 * SPDX-License-Identifier: GPL-3.0+
 * License-Filename: LICENSE
 */
